home *** CD-ROM | disk | FTP | other *** search
/ TOS Silver 2000 / TOS Silver 2000.iso / programm / MM2_DEV / S / MOS / STORAGE.D < prev    next >
Encoding:
Modula Definition  |  1989-08-15  |  3.0 KB  |  83 lines

  1. DEFINITION MODULE Storage;
  2.  
  3. FROM SYSTEM IMPORT ADDRESS, LONGWORD;
  4.  
  5. (*
  6.  * Allgemein verwendbare Funktionen zur dynamischen Speicherverwaltung.
  7.  * Dieses Modul importiert 'StorBase', um damit Speicher vom GEMDOS
  8.  * anzufordern. Es fordert dazu immer große Bereiche an (Größe ist in
  9.  * MOSGlobals.MaxBlSize bestimmbar), die dann ggf. von diesem Modul
  10.  * wiederum in kleinere Portionen aufgeteilt wird. Das hat den Vorteil,
  11.  * daß entgegen der GEMDOS-Verwaltung weniger Speicher für die Verwal-
  12.  * tung pro Block verbraucht wird (10 statt 16 Bytes) und die Funktionen
  13.  * auch schneller arbeiten. Außerdem ist die GEMDOS-Verwaltung selbst auf
  14.  * eine feste, vom freien Speicher unabhängige Anzahl von Allokationen
  15.  * beschränkt (ca. 20-80). 'Storage' dagegen nutzt den gesamten freien
  16.  * Speicher aus.
  17.  *
  18.  * Bei Erfolg einer Alloc-Funktion liefert 'addr' immer einen Zeiger auf
  19.  * eine gerade Adresse, bei Mißerfolg ist 'addr'=NIL.
  20.  *
  21.  * Es ist auch möglich, ungerade Mengen Bytes anzufordern oder freizugeben.
  22.  *)
  23.  
  24. PROCEDURE ALLOCATE ( VAR addr: ADDRESS; size: LONGCARD );
  25.  
  26. PROCEDURE DEALLOCATE ( VAR addr: ADDRESS; size: LONGCARD );
  27.   (* Verkleinert Speicherblock um 'size'.                      *)
  28.   (* Ist 'size'=0, wird der gesamte Speicherblock freigegeben. *)
  29.  
  30. PROCEDURE Available ( size: LONGCARD ): BOOLEAN;
  31.   (* Liefert TRUE, wenn die gefragte Menge Bytes noch frei ist. *)
  32.  
  33. PROCEDURE MemSize ( addr: ADDRESS ): LONGCARD;
  34.   (* Liefert Länge des Speicherblocks. Liefert 0L, wenn Block unbelegt ist. *)
  35.  
  36. PROCEDURE MemAvail (): LONGCARD;
  37.   (* Liefert Anzahl in Bytes des im Augenblick größten belegbaren
  38.    * Speicherbereichs. *)
  39.  
  40. PROCEDURE AllAvail (): LONGCARD;
  41.   (* Liefert gesamten im Augenblick freien Speicherplatz *)
  42.  
  43.  
  44. PROCEDURE TrailAvail (ad: ADDRESS): LONGCARD;
  45.   (*
  46.    * Liefert den noch evtl. freien Bereich direkt hinter dem angegebenen
  47.    * Block. Ist dieser größer als Null, kann der Block davor mittels
  48.    * 'Enlarge' (s.u.) um diesen Betrag vergrößert werden.
  49.    *)
  50.  
  51. PROCEDURE Enlarge ( VAR addr: ADDRESS; add: LONGCARD; VAR ok: BOOLEAN );
  52.   (*
  53.    * Vergrößert den Block um 'add' Bytes, falls direkt dahinter entsprechend
  54.    * viel Speicher frei ist.
  55.    * 'ok' liefert entsprechend 'TRUE', wenn dies möglich war.
  56.    *)
  57.  
  58. PROCEDURE SysAlloc ( VAR addr: ADDRESS; size: LONGCARD );
  59.   (*
  60.    * Wie ALLOCATE, jedoch wird der angeforderte Speicherbereich nicht bei
  61.    * Beendigung des Programms, das aktiv war, während der Speicher ange-
  62.    * fordert wurde, freigegeben, sondern erst, wenn 'Storage' beendet
  63.    * wird, also wenn z.B. die Shell verlassen wird.
  64.    *)
  65.  
  66. PROCEDURE Inconsistent (): BOOLEAN;
  67.   (*
  68.    * Liefert TRUE, wenn die Speicherverwaltung inkonsistent (fehlerhaft)
  69.    * geworden ist. In diesem Fall kann es bei weiteren Storage-Zugriffen
  70.    * zu fatalen Fehler kommen. Deshalb ist dann so bald wie möglich
  71.    * das System neu zu starten.
  72.    *)
  73.  
  74. PROCEDURE Keep ( addr: ADDRESS );
  75.   (*
  76.    * Systemfunktion!
  77.    *)
  78.  
  79. PROCEDURE More ( id: INTEGER; p: ADDRESS );
  80.   (* Systemfunktion! *)
  81.  
  82. END Storage.
  83.